<!--
  ~ Copyright (c) 2021 Contributors to the Eclipse Foundation
  ~
  ~ See the NOTICE file(s) distributed with this work for additional
  ~ information regarding copyright ownership.
  ~
  ~ This program and the accompanying materials are made available under the
  ~ terms of the Eclipse Public License 2.0 which is available at
  ~ http://www.eclipse.org/legal/epl-2.0
  ~
  ~ SPDX-License-Identifier: EPL-2.0
  -->
<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">

  <title>Eclipse Ditto™ 2.0: Changes and roadmap</title>

  <meta name="description" content="Eclipse Ditto 2.0: Changes and roadmap">
  <meta name="author" content="Thomas Jäckle">
  <meta name="date" content="2021-06-22">
  <meta http-equiv="content-language" content="en">

  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

  <link rel="icon" type="image/png" href="../../images/favicon-16x16.png" sizes="16x16">
  <link rel="icon" type="image/png" href="../../images/favicon-32x32.png" sizes="32x32">
  <link rel="icon" type="image/png" href="../../images/favicon-96x96.png" sizes="96x96">

  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=News+Cycle">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css"
        integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">


  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/css/reveal.min.css">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/css/theme/simple.min.css"
        id="theme">

  <!-- Theme used for syntax highlighting of code -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/lib/css/zenburn.min.css">

  <style>
    @font-face {
      font-family: "News Cycle";
    }

    #header-left {
      position: absolute;
      top: 0%;
      left: 0%;
      opacity: 1 !important;
    }

    #header-right {
      position: absolute;
      top: 0%;
      right: 0%;
      opacity: 1 !important;
    }

    .reveal section img {
      background: none;
      border: none;
      box-shadow: none;
    }

    .dim-background .slide-background {
      opacity: 0.3 !important;
      /*background: none !important;  for printing ! */
      /* print with: file:///C:/...../index.html?print-pdf */
    }

    .chapter-background .slide-background {
      opacity: 0.7 !important;
      /*background: none !important;*/ /* for printing ! */
    }

    .print-pdf .reveal .slide-background {
      opacity: 0.7 !important;
    }

    .dim-background .slide-background.past {
      display: none !important;
    }

    .dim-background .slide-background.future {
      display: none !important;
    }

    .chapter-background .slide-background.past {
      display: none !important;
    }

    .chapter-background .slide-background.future {
      display: none !important;
    }

    /*.new-chapter h3 { color: #586e75; }*/
    .introlink a:link {
      font-weight: bold;
      color: #000000
    }

    /* unvisited links */
    .introlink a:visited {
      font-weight: bold;
      color: #000000
    }

    /* visited links   */
    .introlink a:hover {
      font-weight: bold;
      color: #000000
    }

    /* user hovers     */
    .introlink a:active {
      font-weight: bold;
      color: #000000
    }

    ul {
      list-style: none !important;
    }

    ul li {
      padding-left: 1.3em;
    }

    ul li:before {
      list-style: none;
      content: "→";
      display: inline-block;
      margin-left: -1.3em; /* same as padding-left set on li */
      width: 1.3em; /* same as padding-left set on li */
    }

    .footer {
      font-size: 12px !Important;
      font-family: "News Cycle", Impact, sans-serif;
      color: #687175;
      position: absolute;
      bottom: 15px;
      left: 15px;
      margin-bottom: 10px
    }

    .footer a {
      color: #003b6a;
      text-decoration: none;
    }

    /* active links    */
  </style>

  <!-- Printing and PDF exports -->
  <script>
    var link = document.createElement('link');
    link.rel = 'stylesheet';
    link.type = 'text/css';
    link.href =
      window.location.search.match(/print-pdf/gi)
      ? 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/css/print/pdf.min.css'
      : 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/css/print/paper.min.css';
    document.getElementsByTagName('head')[0].appendChild(link);
  </script>

  <!--[if lt IE 9]>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/lib/js/html5shiv.js"></script>
  <![endif]-->
</head>

<body>

<div class="reveal">

    <!-- 2. Create hidden header/footer <div> -->
    <div id="hidden" style="display:none;">
        <div id="header">
            <div id="header-left"><img src="../../images/ditto.svg" style="width: 80px; padding-top: 10px; padding-left: 10px" alt="Ditto logo"></div>
            <div id="header-right"><img src="../../images/iot_logo.svg" style="width: 120px; padding-top: 10px; padding-right: 10px" alt="Eclipse IoT logo"></div>
        </div>
    </div>

    <!-- Any section element inside of this container is displayed as a slide -->
    <div class="slides">
        <!-- Section: Intro -->
        <section>
            <section id="title" class="new-chapter" data-background="../bg-images/background-twin-small.jpg" data-state="chapter-background">
                <!-- background source: https://unsplash.com/collections/425779/iot -->
              <h1 style="line-height: 1em">
                <img src="../../images/iot_logo.svg" style="width: 15%;vertical-align: top; padding-right: 20px" alt="Eclipse IoT">
                <img src="../../images/ditto.svg" style="width: 15%;vertical-align: middle" alt="Eclipse Ditto">
              </h1>
              <h1 style="margin-top: 0.6em; font-size: 2em;">Eclipse Ditto™ 2.0:<br/>Changes and roadmap</h1>
              <h2 style="margin-top: 1.5em; font-size: 0.8em">06/2021</h2>
            </section>
        </section>

        <!-- Section: Ditto -->
        <section style="clear: both;">
            <section id="ditto" style="clear: both;">
                <h2>Eclipse Ditto in context</h2>
              <div style="text-align: left; float: left; width: 65%">
                <img src="../images/ditto-in-action-2020.png" style="width: 90%;padding-top:0.5em" alt="Ditto in action"/>
              </div>
              <p style="text-align: left; float: right; width: 35%; font-size: 0.8em">Ditto as <em>Digital Twin</em> "middleware"</p>
              <ul style="text-align: left; float: right; width: 30%; font-size: 0.8em">
                <li class="fragment" data-fragment-index="1" style="padding-top:0.5em">digital representation of real physical devices</li>
                <li class="fragment" data-fragment-index="1" style="padding-top:0.5em">act as broker for communicating with assets</li>
                <li class="fragment" data-fragment-index="1" style="padding-top:0.5em">consumer-centric & industrial IoT scenarios</li>
              </ul>
            </section>
        </section>

        <!-- Section: Ditto 2.0 -->
        <section style="clear: both;">
          <section id="ditto-20-1" style="clear: both;">
            <h3>Breaking API changes (why 2.0)</h3>
            <ul style="margin-top: 0.5em; font-size: 0.8em">
              <li>Removal of “API version 1” and @Deprecated code</li>
              <li style="margin-top: 0.5em;">Restructuring of Ditto’s Maven modules</li>
            </ul>
            <div class="fragment" data-fragment-index="1" style="margin-top: 1em;">
              <h3>Non-functional enhancements</h3>
              <ul style="margin-top: 0.5em; font-size: 0.8em">
                <li>Improvement of stability during rolling updates</li>
                <li style="margin-top: 0.5em;">Sharding concept for Ditto internal pub/sub</li>
                <li style="margin-top: 0.5em;">Background cleanup improvements</li>
              </ul>
            </div>
          </section>
          <section id="ditto-20-2" style="clear: both;">
            <h3>Functional enhancements</h3>
            <ul style="margin-top: 0.5em; font-size: 0.8em">
              <li class="fragment" data-fragment-index="1">Merge/PATCH updates of digital twins</li>
              <li class="fragment" data-fragment-index="1" style="margin-top: 0.5em;">Expiring policy subjects and policy actions</li>
              <li class="fragment" data-fragment-index="1" style="margin-top: 0.5em;">Built-in acknowledgement for search updates</li>
              <li class="fragment" data-fragment-index="1" style="margin-top: 0.5em;">Establishing connections to endpoints via a SSH tunnel</li>
              <li class="fragment" data-fragment-index="2" style="margin-top: 0.5em;">Configurable OpenID Connect / OAuth2.0 claim extraction</li>
              <li class="fragment" data-fragment-index="2" style="margin-top: 0.5em;">Prioritized recovery of connections after restarts</li>
              <li class="fragment" data-fragment-index="2" style="margin-top: 0.5em;">Support for LastWill and retain flag for MQTT connections</li>
              <li class="fragment" data-fragment-index="2" style="margin-top: 0.5em;">Provide JWT tokens to Websocket endpoint with browser APIs</li>
            </ul>
          </section>
        </section>

        <!-- Section: Ditto roadmap -->
        <section style="clear: both;">
          <section id="ditto-roadmap-1" style="clear: both;">
            <h3>Roadmap - Eclipse Ditto 2.1</h3>
            <ul style="margin-top: 0.5em; font-size: 0.8em">
              <li class="fragment" data-fragment-index="1">Full Apache Kafka integration</li>
              <li class="fragment" data-fragment-index="1" style="margin-top: 0.5em;">Integration with Eclipse Hono via Apache Kafka</li>
              <li class="fragment" data-fragment-index="1" style="margin-top: 0.5em;">Automatic creation of digital twins, e.g. when automatically created in Eclipse Hono via certificate based device auth</li>
              <li class="fragment" data-fragment-index="1" style="margin-top: 0.5em;">Improvements around logging (e.g. into ELK stack or to file)</li>
              <li class="fragment" data-fragment-index="2" style="margin-top: 0.5em;">Support for HMAC based authentication methods, e.g. enabling additional
                integration options for:
                <ul>
                  <li>Azure (HTTP Monitor Data Collector API, IoT Hub, Service Bus REST API)</li>
                  <li>AWS (SNS, S3, <a href="https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html" target="_blank">other AWS services supporting Signature Version 4 signing</a>)</li>
                </ul>
              </li>
            </ul>
          </section>
          <section id="ditto-roadmap-2" style="clear: both;">
            <h3>Looking ahead</h3>
            <ul style="margin-top: 0.5em; font-size: 0.8em">
              <li>Tracing via OpenTelemetry</li>
              <li style="margin-top: 0.5em;">Release of Go(lang) SDK</li>
              <li style="margin-top: 0.5em;">Python SDK</li>
              <li style="margin-top: 0.5em;">...</li>
            </ul>
          </section>
        </section>

        <!-- Section: Questions and Answers -->
        <section style="clear: both;">
            <section id="q-a" class="new-chapter" data-background="../bg-images/background-conclusion-small.jpg"
                     data-state="chapter-background">
                <br/>
              <p>Links:</p>
              <ul>
                <li><a target="_blank" href="https://www.eclipse.org/ditto">Ditto website and documentation</a></li>
                <li><a target="_blank" href="https://github.com/eclipse-ditto/ditto">GitHub</a> - please give us a star ;)</li>
                <li><a target="_blank" href="https://gitter.im/eclipse/ditto">Chatroom to ask more questions</a></li>
                <li><a target="_blank" href="https://developer.bosch-iot-suite.com/service/things/">Commercial offering incl. free plan</a></li>
              </ul>
            </section>
        </section>
    </div>

</div>

<div class="footer">
    Copyright ©2021
    <a href="https://www.bosch.io" target="_blank">Bosch.IO GmbH</a> All rights reserved. |
    <a href="https://www.eclipse.dev/ditto/intro-overview.html" target="_blank">Documentation</a> |
    <a href="https://github.com/eclipse-ditto/ditto" target="_blank">GitHub</a> |
    <a href="https://ditto.eclipseprojects.io" target="_blank">Sandbox</a>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/lib/js/head.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/js/reveal.min.js"></script>

<script>
  function getParameterByName(name, url) {
    if (!url) {
      url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
      results = regex.exec(url);
    if (!results) {
      return null;
    }
    if (!results[2]) {
      return '';
    }
    return decodeURIComponent(results[2].replace(/\+/g, " "));
  }

  // More info https://github.com/hakimel/reveal.js#configuration
  Reveal.initialize({
                      controls: true,
                      progress: true,
                      history: true,
                      center: true,
                      fragments: getParameterByName('fragments') === '', // only use "fragments" feature if queryParam 'fragments' is present
                      slideNumber: 'h.v',

                      transition: 'convex', // none/fade/cube/slide/convex/concave/zoom

                      // More info https://github.com/hakimel/reveal.js#dependencies
                      dependencies: [
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/lib/js/classList.js',
                          condition: function () {
                            return !document.body.classList;
                          }
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/markdown/marked.js',
                          condition: function () {
                            return !!document.querySelector('[data-markdown]');
                          }
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/markdown/markdown.min.js',
                          condition: function () {
                            return !!document.querySelector('[data-markdown]');
                          }
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/highlight/highlight.min.js',
                          async: true,
                          callback: function () {
                            hljs.initHighlightingOnLoad();
                          }
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/zoom-js/zoom.min.js',
                          async: true
                        },
                        {
                          src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/plugin/notes/notes.min.js',
                          async: true
                        }
                      ],
                      keyboard: { // for hama remote presenter:
                        38: 'next',
                        40: 'prev'
                      }
                    });

</script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
  // 3. On Reveal.js ready event, copy header/footer <div> into each `.slide-background` <div>
  var header = $('#header').html();
  if (window.location.search.match(/print-pdf/gi)) {
    Reveal.addEventListener('ready', function (event) {
      $('.slide-background').append(header);
    });
  }
  else {
    $('div.reveal').append(header);
  }
</script>

</body>
</html>
